//
//  HeaderMacro.h
//  YueYueSpecailCarDriver
//
//  Created by 李亚军 on 17/2/23.
//  Copyright © 2017年 黄旺鑫. All rights reserved.
//

#ifndef HeaderMacro_h
#define HeaderMacro_h

typedef enum : NSUInteger {
    TypeOfPushOrder_Push = 2000, // 可抢订单
    TypeOfPushOrder_Delivery = 2001, // 收到派送订单
    TypeOfPushOrder_PassengerCancel = 2002, // 乘客取消订单
    TypeOfPushOrder_PassengerPayOff = 2003, // 乘客支付完成
    TypeOfPushOrder_Changed = 2004, // 订单被改派
    TypeOfPushOrder_ReceivedChangedOrder = 2005, // 收到被改派订单
    TypeOfPushOrder_PassengerTravelAskFor = 2006, // 乘客申请行程
    TypeOfPushOrder_MatchingSuccess = 2007, // 订单匹配成功(推送给司机)
    TypeOfPushOrder_BackgroundShutdown = 3004 // 后台关闭订单
} TypeOfPushOrder;


/// 听单模式的 type
typedef enum : NSUInteger {
    ListenSingleTypeRealTime = 1, // 实时
    ListenSingleTypeAppointment = 2, // 预约
    ListenSingleTypeChartered = 3, // 包车
    ListenSingleTypeAll = 4 // 全部
}ListenSingleType;

/// 载客状态,运营状态
typedef enum : NSUInteger {
    CarryPassengerStatusCarryPassenger = 1, // 载客
    CarryPassengerStatusOrders = 2,  // 接单
    CarryPassengerStatusDeadhead = 3, // 空驶(未接到乘客)
    CarryPassengerStatusOutage // 停运
} CarryPassengerStatus;

/// 订单推送类型,及时单,预约单,日租/半日租预约单
typedef enum : NSInteger {
    OrderPushTypeTimely = 1,  // 及时单
    OrderPushTypeAppointment = 2, // 普通预约单
    OrderPushTypeDaiyRental = 3, // 日租预约单
    OrderPushTypeHalfDayRent = 4 // 半日租
}OrderPushType;

#pragma mark - App名称
#define AppProjectName @"YueYueSpecailCarDriver" // 工程名称,这里用到的有支付宝支付,回调返回app




#pragma mark - 长连接推送code
#define LonglinkCode_Order_Push 2000 // 可抢订单推送
#define LongLinkCode_Order_Delivery 2001 // 订单派送
#define LongLinkCode_Order_Passenger_Cancel 2002 // 乘客取消订单
#define LongLinkCode_Order_Passenger_PayOff 2003 // 乘客已付清
#define LongLinkCode_Order_Changed 2004 // 订单被改派
#define LongLinkCode_Order_ReceivedChangedOrder 2005 // 收到被改派订单
#define LongLinkCode_Order_Passenger_TravelAskFor 2006 // 乘客申请行程
#define LongLinkCode_Order_MatchingSuccess 2007 // 订单匹配成功(推送给司机)
#define LongLinkCode_Order_BackgroundShutdown 3004 // 后台关闭订单

#pragma mark - 长连接推送通知说明
#define LongLinkNoftificationName_OrderPush @"LongLinkNoftificationName_OrderPush" // 可抢订单推送
#define LongLinkNoftificationName_OrderDelivery @"LongLinkNoftificationName_OrderDelivery" // 订单派送
#define LongLinkNoftificationName_PassengerCancelOrder @"LongLinkNoftificationName_PassengerCancelOrder" // 乘客取消订单
#define LongLinkNoftificationName_PassengerPayOff @"LongLinkNoftificationName_PassengerPayOff" // 乘客付清
#define LongLinkNoftificationName_OrderChanged @"LongLinkNoftificationName_OrderChanged" // 订单被改派
#define LongLinkNoftificationName_ReceivedChangedOrder @"LongLinkNoftificationName_ReceivedChangedOrder" // 收到被改派订单
#define LongLinkNoftificationName_PassengerAskForTravel @"LongLinkNoftificationName_PassengerAskForTravel" // 乘客申请行程
#define LongLinkNoftificationName_OrderMatchingSuccess @"LongLinkNoftificationName_OrderMatchingSuccess" // 订单匹配成功(推送给司机)
#define LongLinkNoftificationName_OrderBackShutdown @"LongLinkNoftificationName_OrderBackShutdown" // 后台关闭订单
#pragma mark - KeyWord
#define KeyWord_UpSlideViewMap @"上滑查看地图"
#define KeyWord_DownSlideCloseMap @"下滑关闭地图"
#define KeyWord_DriveOut @"出车"
#define KeyWord_ReceivingOrder @"听单中"
#define KeyWord_RobTheSingleError @"抢单失败"
#define KeyWord_SingleFailure @"派单失败"
#define KeyWord_PassengerCancelOrder @"乘客取消订单"
#define KeyWord_OrderCreatedFailed @"订单生成失败"
#define KeyWord_OrderDealFailed @"支付失败"
#define KeyWord_OrderDealSuccess @"支付成功"

#pragma mark - User_KeyWord  存储本地信息的关键字
#define User_KeyWord_AreThereAnyOngoingRealTimeOrders @"User_KeyWord_AreThereAnyOngoingRealTimeOrders" // 是否有正在进行中的即时订单
#define User_KeyWord_CustomerServiceTel @"CustomerServiceTelephoneNumber" // 客服电话


#pragma mark - 通知名称以及说明
#define NotificationName_IsDealingReceivedOrder @"NotificationName_IsReceivingOrder" // 正在处理接到的订单
#define NotificationName_CanReceivingOrder @"NotificationName_CanReceivingOrder" // 可以获取订单
#define NotificationName_GrabRealTimeOrder @"NotificationName_GrabRealTimeOrder" // 抢到实时订单
#define NotificationName_GrabAppointTimeOrder @"NotificationName_GrabAppointTimeOrder" // 抢到预约单

#define NotificationName_RoutePlaningSuccess @"NotificationName_RoutePlaningSuccess" // 路面规划成功
//#define NotificationName_DriverCancelOrder @"NotificationName_DriverCancelOrder" // 司机取消订单
//#define NotificationName_PaySuccess @"NotificationName_PaySuccess" // 支付成功
#define NotificationName_PayFailure @"NotificationName_PayFailure" // 支付失败
#define NotificationName_ConfirmFare @"NotificationName_ConfirmFare" // 确认费用
#define Notification_DriverWorkingState @"Notification_DriverWorkingState" // 通知的名称,如果app将要激活发送通知
#define Notification_DirverDidEnterBackGround @"Notification_DirverDidEnterBackGround" // 通知名称, app已经进入后台
#define Notification_RefreshOrderList @"Notification_RefreshOrderList" // 进入后台后无法接受长连接的消息,这时候在app没有被杀死的情况下,有后台进入前台那么需要刷新订单列表
#define NotificationName_OngoingOrder_OrderCanceledByPassenger @"NotificationName_OngoingOrder_OrderCanceledByPassenger" // 行程中乘客取消订单
#define NotificaitonName_RoutePlanningSuccess @"NotificaitonName_RoutePlanningSuccess" // 路径规划成功
#define NotificationName_UploadLocationTimer_Close @"NotificationName_UploadLocationTimer_Close" // 首页上传位置信息的定时器关闭通知,如果进入进行中的订单页面关闭定时器,这时候地图代理方法会代替定时器继续上传位置信息,如果送达乘客销毁导航的代理方法(置为nil),导航管理器销毁(置为nil)
#define NotificationName_UploadLocationTimer_Open @"NotificationName_UploadLocationTimer_Open" // 如果进行中的订单结束,那么发送通知开启定时器

#pragma mark - 网络状态检查通知名称以及描述
#define NotificationName_ReachabilityStatusNotReachable @"NotificationName_ReachabilityStatusNotReachable" // 没有网络
#define NotificationName_ReachabilityStatusReachableViaWWAN @"NotificationName_ReachabilityStatusReachableViaWWAN" // 3G|4G网络
#define NotificationName_ReachabilityStatusReachableViaWiFi @"NotificationName_ReachabilityStatusReachableViaWiFi" // wifi


#pragma mark - 支付通知名称以及说明
#define NotificationName_AliPaySuccess @"NotificationName_AliPaySuccess" // 支付宝支付成功
#define NotificationName_AliPayFailure @"NotificationName_AliPayFailure" // 支付宝支付失败

#pragma mark - 颜色
#define UIColorFromRGBA(rgbValue, alphaValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0x00FF00) >> 8))/255.0 blue:((float)(rgbValue & 0x0000FF))/255.0 alpha:alphaValue]
#define Color_bdc8f1 UIColorFromRGBA(0xbdc8f1, 1.0)
#define Color_6b7886 UIColorFromRGBA(0x6b7886, 1.0)
#define Color_3585ff UIColorFromRGBA(0x3585ff, 1.0)
#define Color_dcdfe3 UIColorFromRGBA(0xdcdfe3, 1.0)
#define Color_3e88f5 UIColorFromRGBA(0x3e88f5, 1.0)
#define Color_4F5A67 UIColorFromRGBA(0x4F5A67, 1.0)
#define Color_F3F3F6 UIColorFromRGBA(0xF3F3F6, 1.0) // 背景色
#define Color_8c9fb8 UIColorFromRGBA(0x8c9fb8, 1.0) 



typedef enum : NSUInteger {
    OrderStatusEnumCode_NoOrder = 0, // 当前状态没有可执行的订单,空车状态
    OrderStatusEnumCode_PassengerOrder_WaitingForAnswer = 100, // 100：［新行程］乘客发单、等待应答 . ［出租／专车／拼车］乘客发单
    OrderStatusEnumCode_DriverReceivedOrder_DetermineStroke = 200, // 200［行程确定］司机接单、行程确定 . ［出租／专车／拼车］乘客发单
    OrderStatusEnumCode_DriverSetOut_GoToPickUpPassengers = 210, // 210［去接乘客］司机出发、去接乘客 . ［出租／专车］
    OrderStatusEnumCode_DriverArrived_WaitingForPassengers = 220, // 220［等待乘客］司机到达、等待乘客 . ［出租／专车］
    OrderStatusEnumCode_PickedUpPasengers_StrokeStart = 300, // 300：［行程开始］乘客上车、行程开始 . ［出租／专车／拼车］
    OrderStatusEnumCode_PassengersArrivedDestination = 400, // 400：［行程结束］司机送达目的地
    OrderStatusEnumCode_DriverConfirmFare_WaitingForPassengersToPay = 500, // 500：司机确认费用，等待乘客支付
    OrderStatusEnumCode_StrokeDetermination_PassengerCancelOrder_WaitingForPassengersToPayCancleFare = 511, // 511：［行程确定］乘客取消，待支付取消费用
    OrderStatusEnumCode_StrokeDetermination_DriverCancelOrder_WaitingForPassengersToPayCancleFare = 521, // 521：［行程确定］司机取消，待支付取消费用
    OrderStatusEnumCode_GotoPickUpPassengers_PassengerCancelOrder_WaitingForPassengersToPayCancleFare = 512, // 512：［去接乘客］乘客取消，待支付取消费用
    OrderStatusEnumCode_GotoPickUpPassengers_DriverCancelOrder_WaitingForPassengersToPayCancleFare = 522, // 522：［去接乘客］司机取消，待支付取消费用
    OrderStatusEnumCode_WaitingForPassengers_PassengerCancelOrder_WaitingForPassengersToPayCancleFare = 513, // 513：［等待乘客］乘客取消，待支付取消费用
    OrderStatusEnumCode_WaitingForPassengers_DriverCancelOrder_WaitingForPassengersToPayCancleFare = 523, // 523：［等待乘客］司机取消，待支付取消费用
    OrderStatusEnumCode_PaymentCompleted_StrokeOver = 600, // 600：付款完成、行程结束
    OrderStatusEnumCode_PassengersHasCompletedEvaluationForDriver = 610, // 610：乘客完成对车主评价
    OrderStatusEnumCode_NewStroke_PassengerCancel = 900, // 900：［新行程］乘客取消
    OrderStatusEnumCode_PassengersCancel_StrokeDetemination_DriverNotArrive = 901, // 901: 乘客取消（行程确定后、司机未到达）
    OrderStatusEnumCode_PassengersCancel_StrokeDetemination_DriverArrived = 902, // 902: 乘客取消（行程确定后、司机到达）
    OrderStatusEnumCode_NewStroke_DriverCancel = 910, // 910：［新行程］司机取消
    OrderStatusEnumCode_NoFare_StrokeDetermination_PassengersCancelOrder = 90200, // 90200：［无费用］［行程确定］乘客取消订单
    OrderStatusEnumCode_NoFare_GotoPickUpPassengers_PassengersCancelOrder = 90210, // 90210：［无费用］［去接乘客］乘客取消订单
    OOrderStatusEnumCode_NoFare_WaitingForPassengers_PassengersCancelOrder = 90220, // 90220：［无费用］［等待乘客］乘客取消订单
    OrderStatusEnumCode_HaveFare_StrokeDetermination_PassengersCancelOrder = 90511, // 90511：［有费用］［行程确定］乘客取消订单
    OrderStatusEnumCode_HaveFare_GotoPickUpPassengers_PassengersCancelOrder = 90512, // 90512：［有费用］［去接乘客］乘客取消订单
    OrderStatusEnumCode_HaveFare_WaitingForPassengers_PassengersCancelOrder = 90513, // 90513：［有费用］［等待乘客］乘客取消订单
    OrderStatusEnumCode_NoFare_StrokeDetermination_DriverCancelOrder = 91200, // 91200：［无费用］［行程确定］司机取消订单
    OrderStatusEnumCode_NoFare_GotoPickUpPassengers_DriverCancelOrder = 91210, // 91210：［无费用］［去接乘客］司机取消订单
    OrderStatusEnumCode_NoFare_WaitingForPassengers_DriverCancelOrder = 91220, // 91220：［无费用］［等待乘客］司机取消订单
    OrderStatusEnumCode_HaveFare_StrokeDetermination_DriverCancelOrder = 91521,// 91521：［有费用］［行程确定］司机取消订单
    OrderStatusEnumCode_HaveFare_GotoPickUpPassengers_DriverCancelOrder = 91522, // 91522：［有费用］［去接乘客］司机取消订单
    OrderStatusEnumCode_HaveFare_WaitingForPassengers_DriverCancelOrder = 91523, // 91523：［有费用］［等待乘客］司机取消订单
    OrderStatusEnumCode_OrderClosedByCustomerService = 990 // 990：客服关闭订单
} OrderStatusEnumCode;

enum OrderState: NSInteger
{
    OrderState_NotStart,     ///< 未开始
    OrderState_GoToPickUpPassenger = 210,   ///< 行程开始,去接乘客
    OrderState_ArriveAtThePlaceOfDeparture = 220, ///< 到达出发地
    OrderState_GoToDestination = 300,    ///< 接到乘客,前往目的地
    OrderState_ArriveAtThePlaceOfDestination = 400 ///< 乘客送达
};
typedef enum OrderState OrderState;

#pragma mark - OrderStatusCode 订单状态编码
#define OrderStatusCode_PassengerOrder_WaitingForAnswer 100 // 100：［新行程］乘客发单、等待应答 . ［出租／专车／拼车］乘客发单
#define OrderStatusCode_DriverReceivedOrder_DetermineStroke 200 // 200［行程确定］司机接单、行程确定 . ［出租／专车／拼车］乘客发单
#define OrderStatusCode_DriverSetOut_GoToPickUpPassengers 210 // 210［去接乘客］司机出发、去接乘客 . ［出租／专车］
#define OrderStatusCode_DriverArrived_WaitingForPassengers 220 // 220［等待乘客］司机到达、等待乘客 . ［出租／专车］
#define OrderStatusCode_PickedUpPasengers_StrokeStart 300 // 300：［行程开始］乘客上车、行程开始 . ［出租／专车／拼车］
#define OrderStatusCode_PassengersArrivedDestination 400 // 400：［行程结束］司机送达目的地
#define OrderStatusCode_DriverConfirmFare_WaitingForPassengersToPay 500 // 500：司机确认费用，等待乘客支付
#define OrderStatusCode_StrokeDetermination_PassengerCancelOrder_WaitingForPassengersToPayCancleFare 511 // 511：［行程确定］乘客取消，待支付取消费用
#define OrderStatusCode_StrokeDetermination_DriverCancelOrder_WaitingForPassengersToPayCancleFare 521 // 521：［行程确定］司机取消，待支付取消费用
#define OrderStatusCode_GotoPickUpPassengers_PassengerCancelOrder_WaitingForPassengersToPayCancleFare 512 // 512：［去接乘客］乘客取消，待支付取消费用
#define OrderStatusCode_GotoPickUpPassengers_DriverCancelOrder_WaitingForPassengersToPayCancleFare 522 // 522：［去接乘客］司机取消，待支付取消费用
#define OrderStatusCode_WaitingForPassengers_PassengerCancelOrder_WaitingForPassengersToPayCancleFare 513 // 513：［等待乘客］乘客取消，待支付取消费用
#define OrderStatusCode_WaitingForPassengers_DriverCancelOrder_WaitingForPassengersToPayCancleFare 523 // 523：［等待乘客］司机取消，待支付取消费用
#define OrderStatusCode_PaymentCompleted_StrokeOver 600 // 600：付款完成、行程结束
#define OrderStatusCode_PassengersHasCompletedEvaluationForDriver 610 // 610：乘客完成对车主评价
#define OrderStatusCode_NewStroke_PassengerCancel 900 // 900：［新行程］乘客取消
#define OrderStatusCode_PassengersCancel_StrokeDetemination_DriverNotArrive 901   // 901: 乘客取消（行程确定后、司机未到达）
#define OrderStatusCode_PassengersCancel_StrokeDetemination_DriverArrived 902  // 902: 乘客取消（行程确定后、司机到达）
#define OrderStatusCode_NewStroke_DriverCancel 910 // 910：［新行程］司机取消
#define OrderStatusCode_NoFare_StrokeDetermination_PassengersCancelOrder 90200 // 90200：［无费用］［行程确定］乘客取消订单
#define OrderStatusCode_NoFare_GotoPickUpPassengers_PassengersCancelOrder 90210 // 90210：［无费用］［去接乘客］乘客取消订单
#define OrderStatusCode_NoFare_WaitingForPassengers_PassengersCancelOrder 90220 // 90220：［无费用］［等待乘客］乘客取消订单
#define OrderStatusCode_HaveFare_StrokeDetermination_PassengersCancelOrder 90511 // 90511：［有费用］［行程确定］乘客取消订单
#define OrderStatusCode_HaveFare_GotoPickUpPassengers_PassengersCancelOrder 90512 // 90512：［有费用］［去接乘客］乘客取消订单
#define OrderStatusCode_HaveFare_WaitingForPassengers_PassengersCancelOrder 90513 // 90513：［有费用］［等待乘客］乘客取消订单
#define OrderStatusCode_NoFare_StrokeDetermination_DriverCancelOrder 91200 // 91200：［无费用］［行程确定］司机取消订单
#define OrderStatusCode_NoFare_GotoPickUpPassengers_DriverCancelOrder 91210 // 91210：［无费用］［去接乘客］司机取消订单
#define OrderStatusCode_NoFare_WaitingForPassengers_DriverCancelOrder 91220 // 91220：［无费用］［等待乘客］司机取消订单
#define OrderStatusCode_HaveFare_StrokeDetermination_DriverCancelOrder 91521 // 91521：［有费用］［行程确定］司机取消订单
#define OrderStatusCode_HaveFare_GotoPickUpPassengers_DriverCancelOrder 91522 // 91522：［有费用］［去接乘客］司机取消订单
#define OrderStatusCode_HaveFare_WaitingForPassengers_DriverCancelOrder 91523 // 91523：［有费用］［等待乘客］司机取消订单
#define OrderStatusCode_OrderClosedByCustomerService 990 // 990：客服关闭订单

#pragma mark - userDefaultkey
#define UserKeyWord_OldPoint_lat @"UserKeyWord_OldPoint_lat" // 保存用户上一次定位点
#define UserKeyWord_OldPoint_lng @"UserKeyWord_OldPoint_lng" // 保存用户上一次定位点
#endif /* HeaderMacro_h */
